<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        li {
            list-style: none;
        }

        .wrap {
            margin-top: 20px;
        }

        #title {
            line-height: 60px;
            font-size: 32px;
        }

        .list li {
            line-height: 40px;
            border: 1px dashed #333;
            text-indent: 10px;
        }
    </style>
</head>

<body>
    <div class="wrap">
        <h2 id="title">标题</h2>
        <ul class="list">
            <li>01</li>
            <li>02</li>
            <li>03</li>
            <li>04</li>
            <li>05</li>
            <li>06</li>
        </ul>
    </div>
</body>
<script>
    // DOM操作  =>  获取元素,操作元素(修改元素的内容 属性 样式 绑定事件),元素的增删改查

    // 目的: 对DOM操作进行封装,可以方便用户快捷获取元素,操作元素,以及元素的增删改查

    // 构造函数版
    function GetEle(selector) { // selector 传入css选择器
        // {}
        // {}[[Prototype]] = GetEle.prototype;
        // this -> {}
        // return this;

        var list = document.querySelectorAll(selector);  // 对应选择器获取元素 (伪数组)
        list = Array.from(list);  // 伪数组转真数组
        Object.setPrototypeOf(list, GetEle.prototype); // 直接修改伪数组的[[Prototype]]可能会丢失length属性 => 先转真数组,真数组改伪数组

        // 自定义构造函数的返回值
        return list; // 返回伪数组, 有数组的结构,但是又可以访问GetEle.prototype上的方法
    }

    GetEle.prototype.setText = function (con) {
        // this -> 调用此方法的实例化对象
        for (var i = 0; i < this.length; i++) {
            var ele = this[i];
            ele.innerText = con;
        }
    }

    GetEle.prototype.getText = function () {
        return this[0].innerText;
    }

    GetEle.prototype.on = function (type, callback) {
        for (var i = 0; i < this.length; i++) {
            var ele = this[i];
            ele.addEventListener(type, callback)
        }
    }
    GetEle.prototype.off = function (type, callback) {
        for (var i = 0; i < this.length; i++) {
            var ele = this[i];
            ele.removeEventListener(type, callback)
        }
    }

    var titles = new GetEle("#title");
    console.log(titles);

    titles.setText("123123");


    var lis = new GetEle(".list li");
    console.log(lis);

    lis.setText("456456")











</script>

</html>